#ifndef DISTANCEMEASUREMENTDRAWERFACTORY_H
#define DISTANCEMEASUREMENTDRAWERFACTORY_H

#include <QObject>
#include <QGraphicsScene>
#include <QVariantMap>
#include <QMap>

// 提前声明
class HorizontalDoubleLineDrawer;
class VerticalDoubleLineDrawer;
enum class MeasurementMode : int;

/**
 * @brief 距离测量绘制器工厂类
 * 
 * 负责创建和管理不同测量模式的绘制器实例，提供统一的接口进行绘制操作。
 */
class DistanceMeasurementDrawerFactory : public QObject
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * @param parent 父对象
     */
    explicit DistanceMeasurementDrawerFactory(QObject *parent = nullptr);

    /**
     * @brief 析构函数
     */
    ~DistanceMeasurementDrawerFactory();

    /**
     * @brief 设置图形场景
     * @param scene 图形场景指针
     */
    void setScene(QGraphicsScene *scene);

    /**
     * @brief 根据测量模式获取相应的绘制器
     * @param mode 测量模式
     * @return 绘制器对象，如果不支持该模式则返回nullptr
     */
    QObject *getDrawer(MeasurementMode mode);

    /**
     * @brief 设置绘制样式参数
     * @param params 样式参数映射
     */
    void setParameters(const QVariantMap &params);

    /**
     * @brief 清除所有绘制器的内容
     */
    void clearAll();
    
    /**
     * @brief 更新缩放比例
     * @param scale 新的缩放比例
     */
    void updateScale(double scale);
    
    /**
     * @brief 初始化测量工具
     * @param mode 测量模式
     * @param imageWidth 图像宽度
     * @param imageHeight 图像高度
     * @param scale 缩放比例
     * @param offset 偏移量
     */
    void initializeMeasurementTool(MeasurementMode mode, int imageWidth, int imageHeight, 
                                  double scale, const QPointF &offset);
signals:
    /**
     * @brief 横向双线变化信号
     * @param result 变化后的测量结果（包含线条位置等信息）
     */
    void horizontalDoubleLineChanged(const QVariantMap &result);
    
    /**
     * @brief 纵向双线变化信号
     * @param result 变化后的测量结果（包含线条位置等信息）
     */
    void verticalDoubleLineChanged(const QVariantMap &result);

private:
    QGraphicsScene *m_scene; ///< 图形场景指针
    
    // 绘制器实例
    HorizontalDoubleLineDrawer *m_horizontalDoubleLineDrawer; ///< 横向双线绘制器
    VerticalDoubleLineDrawer *m_verticalDoubleLineDrawer; ///< 纵向双线绘制器
};

#endif // DISTANCEMEASUREMENTDRAWERFACTORY_H
